-
Notifications
You must be signed in to change notification settings - Fork 3
OCM package build + publish + local tests #331
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
OCM package build + publish + local tests #331
Conversation
…ps://github.com/openmcp-project/ui-frontend into feat/adding-ocm-package-for-new-version-release
sbom: true | ||
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.nextVersion }} | ||
|
||
- name: Install OCM CLI |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if we need this and installation below
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need this.
sbom: true | ||
tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.event.inputs.nextVersion }} | ||
|
||
- name: Install OCM CLI |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need this.
ocm/component-descriptor-local.yaml
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no need for having a local and a remote descriptor. We just need one, the remote.
Taskfile.yml
Outdated
- rm -rf {{.OCM_OUTPUT_DIR}} | ||
- | | ||
ocm add components --create --force --copy-resources \ | ||
--complete \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
--complete \ |
We dont need the complete mark here.
Taskfile.yml
Outdated
cmds: | ||
- rm -rf {{.OCM_OUTPUT_DIR}} | ||
- | | ||
ocm add components --create --force --copy-resources \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ocm add components --create --force --copy-resources \ | |
ocm add components --create \ |
Also we dont need to copy the resource, the image is already pushed to the oci ghcr repo
Taskfile.yml
Outdated
--copy-resources \ | ||
--enforce --overwrite \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
--copy-resources \ | |
--enforce --overwrite \ |
No need for copy-resources, the image is already in ghcr. This would copy it again.
Would prefer not to use --enforce and --overwrite to not overwrite a component for now.
Taskfile.yml
Outdated
test:inspect-ocm: | ||
desc: "Inspects the locally built OCM component. Usage: task test:inspect-ocm -- <version>" | ||
cmds: | ||
- echo "--- Component Details ---" | ||
- ocm get component -o yaml {{.OCM_COMPONENT_NAME}}:{{.OCM_COMPONENT_VERSION}} --repo {{.OCM_OUTPUT_DIR}} | ||
- echo "\n--- Component Resources ---" | ||
- ocm get resources -o wide {{.OCM_COMPONENT_NAME}}:{{.OCM_COMPONENT_VERSION}} --repo {{.OCM_OUTPUT_DIR}} | ||
vars: | ||
OCM_COMPONENT_VERSION: '{{.CLI_ARGS}}' | ||
|
||
test:build-image: | ||
desc: "Builds the docker image for local testing. Usage: task test:build-image TAG=v-local-test" | ||
cmds: | ||
- docker build -t {{.DOCKER_IMAGE}} . | ||
|
||
test:publish-image: | ||
desc: "Publishes the docker image for local testing. Usage: task test:publish-image TAG=v-local-test" | ||
cmds: | ||
- docker push {{.DOCKER_IMAGE}} | ||
|
||
test:run: | ||
desc: "Runs the locally built image in a docker container. Usage: task test:run TAG=v-local-test" | ||
cmds: | ||
- docker run --rm -p 3000:3000 {{.DOCKER_IMAGE}} | ||
|
||
test:run-from-ocm: | ||
desc: "Extracts image reference from OCM component and runs it. Usage: task test:run-from-ocm -- <version>" | ||
cmds: | ||
- | | ||
IMAGE_REF=$(ocm get resources {{.OCM_COMPONENT_NAME}}:{{.OCM_COMPONENT_VERSION}} --repo {{.OCM_OUTPUT_DIR}} -o json | jq -r '.items[0].element.access.imageReference') | ||
echo "Running image from OCM component: $IMAGE_REF" | ||
docker run --rm -p 5173:5173 --env-file {{.ROOT_DIR}}/.env $IMAGE_REF | ||
vars: | ||
OCM_COMPONENT_VERSION: '{{.CLI_ARGS}}' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would prefer to call this not test:
as this is more a reserved word for test runs.
Maybe lets call it build:image:local
.
Would also rename test:run
to run:image:local
or similar.
We also don't need the action test:run-from-ocm
.
Taskfile.yml
Outdated
local:start-registry: | ||
desc: "Starts a local Docker registry on localhost:5000" | ||
cmds: | ||
- docker run -d -p 5000:5000 --name registry --rm registry:2 | ||
status: | ||
- docker ps | grep -q registry | ||
|
||
local:stop-registry: | ||
desc: "Stops the local Docker registry" | ||
cmds: | ||
- docker stop registry | ||
ignore_error: true | ||
|
||
local:build-and-push: | ||
desc: "Builds and pushes image to local registry. Usage: task local:build-and-push TAG=v0.0.1" | ||
cmds: | ||
- docker build -t localhost:5000/mcp-ui-frontend:{{.TAG}} . | ||
- docker push localhost:5000/mcp-ui-frontend:{{.TAG}} | ||
vars: | ||
TAG: '{{.TAG | default "latest"}}' | ||
|
||
local:build-ocm: | ||
desc: "Builds OCM component with local registry reference (uses --skip-digest-generation for local testing). Usage: task local:build-ocm -- <version>" | ||
cmds: | ||
- rm -rf {{.OCM_OUTPUT_DIR}} | ||
- | | ||
ocm add components --create --force --skip-digest-generation \ | ||
--file {{.OCM_OUTPUT_DIR}} \ | ||
{{.OCM_DESCRIPTOR_LOCAL}} -- \ | ||
VERSION={{.OCM_COMPONENT_VERSION}} \ | ||
COMPONENT_NAME={{.OCM_COMPONENT_NAME}} \ | ||
PROVIDER={{.OCM_PROVIDER}} | ||
vars: | ||
OCM_COMPONENT_VERSION: '{{.CLI_ARGS}}' | ||
|
||
# This is full workflow to create local registry, build, push, create OCM and run application locally. | ||
|
||
local:test-full-flow: | ||
desc: "Full local test: start registry, build, push, create OCM, run. Usage: task local:test-full-flow TAG=v0.0.1" | ||
cmds: | ||
- task: local:start-registry | ||
- task: local:build-and-push | ||
vars: | ||
TAG: "{{.TAG}}" | ||
- task: local:build-ocm | ||
vars: | ||
CLI_ARGS: "{{.TAG}}" | ||
- task: test:inspect-ocm | ||
vars: | ||
CLI_ARGS: "{{.TAG}}" | ||
- task: test:run-from-ocm | ||
vars: | ||
CLI_ARGS: "{{.TAG}}" No newline at end of file |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lets remove this local registry part. We don't need this.
Dockerfile
Outdated
|
||
# Build | ||
ENV NODE_ENV=production | ||
ENV NODE_OPTIONS=--max-old-space-size=4096 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it without not working? Why we need to change the Dockerfile?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was not working for me when I was trying to deploy it locally
Taskfile.yml
Outdated
LOCAL_REGISTRY: localhost:5000 | ||
LOCAL_IMAGE_NAME: mcp-ui-frontend | ||
LOCAL_DOCKER_IMAGE: "{{.LOCAL_REGISTRY}}/{{.LOCAL_IMAGE_NAME}}:{{.IMAGE_TAG}}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LOCAL_REGISTRY: localhost:5000 | |
LOCAL_IMAGE_NAME: mcp-ui-frontend | |
LOCAL_DOCKER_IMAGE: "{{.LOCAL_REGISTRY}}/{{.LOCAL_IMAGE_NAME}}:{{.IMAGE_TAG}}" |
You dont need to add a local registry & image for building the ocm component locally. You can just use the oci image from remote and build it locally with the remote image.
Taskfile.yml
Outdated
OCM_TARGET_REPO: '{{.OCM_TARGET_REPO | default (print .REGISTRY "/components") }}' | ||
OCM_OUTPUT_DIR: "{{.ROOT_DIR}}/.ctf" | ||
OCM_DESCRIPTOR: "{{.ROOT_DIR}}/ocm/component-descriptor.yaml" | ||
OCM_DESCRIPTOR_LOCAL: "{{.ROOT_DIR}}/ocm/component-descriptor-local.yaml" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OCM_DESCRIPTOR_LOCAL: "{{.ROOT_DIR}}/ocm/component-descriptor-local.yaml" |
Taskfile.yml
Outdated
|
||
vars: | ||
# Variables for Docker image | ||
REGISTRY: ghcr.io/openmcp-project |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
REGISTRY: ghcr.io/openmcp-project | |
REGISTRY: {{.REGISTRY | default (print "ghcr.io/openmcp-project") }} |
Lets do it like this. So someone can override the registry locally if he/she wants to.
What this PR does / why we need it:
Packing UI into OCM + publish.
I Added local tests with local registry.
task local:test-full-flow:
is to create OCM package and then use it to host app locally within Docker.Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer: